#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
Matplotlib初始化模块
预先构建matplotlib字体缓存，避免应用启动时显示"Matplotlib is building the font cache"消息
"""

import os
import sys
import logging

logger = logging.getLogger("matplotlib_init")

def init_matplotlib():
    """初始化matplotlib，预构建字体缓存"""
    try:
        # 设置环境变量指向预构建的缓存目录
        from pathlib import Path
        import site
        
        # 查找可能的缓存目录
        cache_dir = None
        possible_dirs = []
        
        # 1. 检查是否在打包环境中
        if getattr(sys, 'frozen', False):
            # 打包环境中，查找matplotlib_cache目录
            exe_dir = Path(sys.executable).parent
            possible_dirs = [
                exe_dir / "matplotlib_cache",
                exe_dir / "assets" / "matplotlib_cache",
                exe_dir.parent / "Resources" / "matplotlib_cache",
                exe_dir / "Resources" / "matplotlib_cache",
            ]
        else:
            # 开发环境中，使用项目目录
            project_root = Path(__file__).parent.parent
            possible_dirs = [
                project_root / "assets" / "matplotlib_cache",
            ]
            
        # 查找第一个存在的目录
        for d in possible_dirs:
            if d.exists():
                cache_dir = str(d)
                break
                
        # 如果找到缓存目录，设置环境变量
        if cache_dir:
            os.environ['MPLCONFIGDIR'] = cache_dir
            logger.info(f"使用预构建的Matplotlib字体缓存: {cache_dir}")
        
        # 导入matplotlib并配置
        import matplotlib
        matplotlib.use('Agg')  # 使用非交互式后端
        
        # 强制重建字体缓存 - 使用正确的方法
        from matplotlib import font_manager
        font_manager.findfont('Arial')  # 触发字体缓存构建
        
        logger.info("Matplotlib字体缓存初始化完成")
        return True
    except Exception as e:
        logger.error(f"Matplotlib初始化失败: {e}")
        return False

if __name__ == "__main__":
    # 如果直接运行此脚本，则执行初始化
    logging.basicConfig(level=logging.INFO)
    init_matplotlib()
    print("Matplotlib字体缓存构建完成") 